package com.foreknow.service.impl;

import com.foreknow.dao.AdminDao;
import com.foreknow.dao.impl.AdminDaoImpl;
import com.foreknow.db.DBManager;
import com.foreknow.model.Admin;
import com.foreknow.service.AdminService;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/**
 * 事务需要在Service层来处理
 * 什么是事务：就是一个逻辑工作单(很多操作)，要么这些全成功(提交事务) ，如果有一步操作失败，取消
 *            之前所有的操作(回滚)
 * 事务包含哪些操作： DML（insert delete update）
 *
 * conn.setAutoCommit(false);//先这样简单自动提交，以后再业务层管理事务，就需要设置为false了
 */
public class AdminServiceImpl implements AdminService {
//    private AdminDao adminDao;
//
//    public AdminServiceImpl() {
//        adminDao = new AdminDaoImpl();
//    }

    @Override
    public boolean save(Admin admin) {
        Connection connection = null;
        boolean isRight = false;
        try {
            DBManager dbManager = DBManager.getInstance();
            connection = dbManager.getConnection();
            //调用BaseDao中的setConnection方法
            AdminDaoImpl adminDao = new AdminDaoImpl();
            adminDao.setConnection(connection);
            //调用dao中的方法
            isRight = adminDao.save(admin);
            //提交事务 connection.commit()
            connection.commit();
        } catch (SQLException e) {
            try {
                //回滚
                connection.rollback();
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
            e.printStackTrace();
        }
        return isRight;
    }



    @Override
    public Admin queryById(int id) {
        return null;
    }

    @Override
    public boolean update(Admin admin) {
        return false;
    }

    @Override
    public boolean delete(int id) {
        return false;
    }

    @Override
    public List<Admin> queryAll() {
        return null;
    }

    @Override
    public Admin login(String name, String pass) {
        //连接数据库
        DBManager dbManager = DBManager.getInstance();
        Connection conn = dbManager.getConnection();
        //将DBManager中获取到的连接conn传递给JdbcTemplate中的连接，之后才能调用方法操作数据库
        AdminDaoImpl adminDao = new AdminDaoImpl();
        adminDao.setConnection(conn);
        //调用dao中的方法查询
        Admin admin = adminDao.login(name,pass);
        return admin;
    }

    public static void main(String[] args) {
        AdminService service = new AdminServiceImpl();
        Admin admin = service.login("fender","123456");
        System.out.println(admin.getName());
    }

}
